package org.example.spring02aop.impl;

import org.example.spring02aop.calculator.MathCalculator;
import org.springframework.stereotype.Component;

@Component
public class MathCalculatorImpl implements MathCalculator {

    /*
    * 日志：
    * 1、硬编码：不推荐（原因：通用逻辑与专业逻辑耦合，不易修改维护）
    * 2、静态代理：编码时期间就决定好了代理的关系
    *           定义：定义一个代理对象，包装这个组件。以后业务的执行，从代理开始，不直接调用组件
    *                   （代理对象：目标的接口的子类型。代理对象本身不是目标对象，而是将目标对象作为自己的属性）
    *           优点：同一种类型的所有对象都能代理
    *           缺点：不能动态控制
    *           特点：定义期间就指定好了互相代理关系
    * 3、动态代理：运行期间才确定好代理关系（拦截器）
    *           定义：目标对象在执行期间会被动态拦截，插入指定逻辑
    *           优点：动态控制，可以动态的指定代理关系，代理世间万物
    *           缺点：难写
    *           */

    @Override
    public int add(int i, int j) {
        //硬编码日志
        /*System.out.println("【日志】add开始：参数："+ i + "，" + j);
        System.out.println("【日志】add结束：结果：" + (i + j));*/
        return (i + j);
    }

    @Override
    public int sub(int i, int j) {
        return (i - j);
    }

    @Override
    public int mul(int i, int j) {
        return (i * j);
    }

    @Override
    public int div(int i, int j) {
        return (i / j);
    }
}
